package com.newshub.business.service;

import com.newshub.business.entity.Category;
import com.newshub.business.entity.News;
import com.newshub.business.dto.NewsQueryDTO;
import com.newshub.business.dto.PageResult;
import java.util.List;
import java.util.Map;

/**
 * 新闻服务接口
 */
public interface NewsService {
    
    /**
     * 获取所有分类
     * @return 分类列表
     */
    List<Category> getCategories();
    
    /**
     * 获取新闻源卡片数据
     * @return 新闻源卡片列表
     */
    List<Map<String, Object>> getSourceCards();
    
    /**
     * 获取指定来源的新闻列表
     * @param sourceId 来源ID
     * @param categoryId 分类ID（可选）
     * @param limit 限制数量
     * @return 新闻列表
     */
    List<News> getNewsBySourceId(Integer sourceId, Integer categoryId, Integer limit);
    
    /**
     * 根据ID获取新闻详情
     * @param newsId 新闻ID
     * @return 新闻对象
     */
    News getNewsById(Integer newsId);
    
    /**
     * 获取首页新闻列表
     * @param categoryId 分类ID（可选）
     * @param sourceId 来源ID（可选）
     * @param limit 限制数量
     * @return 新闻列表
     */
    List<News> getHomeNews(Integer categoryId, Integer sourceId, Integer limit);
    
    /**
     * 根据关键词搜索新闻
     * @param keyword 关键词
     * @return 新闻列表
     */
    List<News> searchNews(String keyword);
    
    /**
     * 根据关键词分页搜索新闻
     * @param keyword 关键词
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    PageResult<News> searchNewsPage(String keyword, Integer pageNum, Integer pageSize);
    
    /**
     * 获取最新新闻
     * @param limit 限制数量
     * @return 新闻列表
     */
    List<News> getLatestNews(Integer limit);
    
    // ==================== 管理功能 ====================
    
    /**
     * 分页查询新闻列表（管理后台）
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    PageResult<News> getNewsPage(NewsQueryDTO queryDTO);
    
    /**
     * 添加新闻
     * @param news 新闻对象
     * @return 是否成功
     */
    boolean addNews(News news);
    
    /**
     * 更新新闻
     * @param news 新闻对象
     * @return 是否成功
     */
    boolean updateNews(News news);
    
    /**
     * 删除新闻
     * @param id 新闻ID
     * @return 是否成功
     */
    boolean deleteNews(Integer id);
    
    /**
     * 批量删除新闻
     * @param ids 新闻ID列表
     * @return 是否成功
     */
    boolean batchDeleteNews(List<Integer> ids);
    
    /**
     * 更新新闻状态
     * @param id 新闻ID
     * @param status 状态
     * @return 是否成功
     */
    boolean updateNewsStatus(Integer id, Integer status);
    
    /**
     * 设置/取消热点新闻
     * @param id 新闻ID
     * @param isHot 是否热点
     * @return 是否成功
     */
    boolean updateNewsHot(Integer id, Integer isHot);

    // ==================== 统计功能 ====================
    
    /**
     * 获取新闻趋势统计数据
     * @param period 统计周期：day-按天，week-按周，month-按月
     * @return 趋势统计数据
     */
    Map<String, Object> getNewsTrendStats(String period);
}